package Day7;

import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改
/**
 * 2021Java真题:直线
 * https://www.lanqiao.cn/problems/1449/learning/
 */
public class Main1 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        //确保结果的唯一性
        HashSet<Map<Double , Double>> set = new HashSet<>();
        //包每个点放入集合中
        List<Map<Integer , Integer>> list = new LinkedList<>();

        for(int i = 0; i < 20; i++){
          for(int j = 0; j < 21; j++){
            Map<Integer , Integer> map = new HashMap<>();
            map.put(i,j);
            list.add(map);
          }
        }


        //取两个点
        double x1 = 0 , x2 = 0 , y1 = 0 , y2 = 0;
        for(int i = 0; i < list.size(); i++){
          for(int j = i + 1; j < list.size(); j++){
            //取出每条直线对应的两个点
            //点1
            for(Map.Entry<Integer , Integer> entry : list.get(i).entrySet()){
              x1 = entry.getKey();
              y1 = entry.getValue();
            }

            //点2 
            for(Map.Entry<Integer , Integer> entry : list.get(j).entrySet()){
              x2 = entry.getKey();
              y2 = entry.getValue();
            }

            //如果这两个点x 或 y 在同一个位置的，就代表他是一条竖线或横线
            if(x1 == x2 || y1 == y2){
              continue;
            }

            //计算直线的斜率和截距，如果有相同的斜率和截距就代表是同一条直线
            double k = (y2 - y1) / (x2 - x1);
            double b = (x2 * y1 - x1 * y2) / (x2 - x1);
            Map<Double , Double> temp = new HashMap<>();
            temp.put(k , b);
            //存入到set中进行去重
            set.add(temp);
          }
        }
        //加上20条竖线和21条横线
        System.out.println(set.size() + 20 + 21);
        scan.close();
    }
}   